package main

import (
	"fmt"
	"sync"
	"sync/atomic"
)

/**
使用原子操作（ sync/atomic 包）实现一个无锁的计数器。启动10个协程，
每个协程对计数器进行1000次递增操作，最后输出计数器的值。
*/

var lock sync.Mutex
var wg sync.WaitGroup
var count int64

//func add() {
//	atomic.AddInt64(&count, 1)
//}
//
//func main() {
//	for i := 0; i < 10; i++ {
//		wg.Add(1)
//		go func() {
//			for j := 0; j < 1000; j++ {
//				add()
//			}
//			defer wg.Done()
//		}()
//
//	}
//	wg.Wait()
//	fmt.Println(count)
//}

func add() {
	for i := 0; i < 1000; i++ {
		atomic.AddInt64(&count, 1)
	}
	defer wg.Done()
}

func main() {
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go add()
	}
	wg.Wait()
	fmt.Println(count)
}
